<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
<!-- designer-manual.qdoc -->
  <title>使用自定义小部件（Widgets） | Qt Designer 手册</title>
  <link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
  <script type="text/javascript">
    document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
    // loading style sheet breaks anchors that were jumped to before
    // so force jumping to anchor again
    setTimeout(function() {
        var anchor = location.hash;
        // need to jump to different anchor first (e.g. none)
        location.hash = "#";
        setTimeout(function() {
            location.hash = anchor;
        }, 0);
    }, 0);
  </script>
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="main">
    <div class="main-rounded">
      <div class="navigationbar">
        <table><tr>
<td ><a href="../qtdoc/index.html">Qt 5.14</a></td><td ><a href="qtdesigner-manual.html">Qt Designer 手册</a></td><td >使用自定义小部件（Widgets）</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right"><a href="qtdesigner-manual.html">Qt 5.14.2 参考文档</a></td>
        </tr></table>
      </div>
    </div>
<div class="content">
<div class="line">
<div class="content mainContent">
  <link rel="prev" href="designer-customizing-forms.html" />
  <link rel="next" href="designer-creating-custom-widgets.html" />
<p class="naviNextPrevious headerNavi">
<a class="prevPage" href="designer-customizing-forms.html">自定义窗体</a>
<span class="naviSeparator">  &#9702;  </span>
<a class="nextPage" href="designer-creating-custom-widgets.html">创建自定义小部件（Widgets）</a>
</p><p/>
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#handling-custom-widgets">处理自定义小部件</a></li>
<li class="level2"><a href="#promoting-widgets">提升小部件</a></li>
<li class="level2"><a href="#user-defined-custom-widgets">用户定义自定义小部件</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">使用自定义小部件（Widgets）</h1>
<span class="subtitle"></span>
<!-- $$$designer-using-custom-widgets.html-description -->
<div class="descr"> <a name="details"></a>
<p><i>Qt Designer</i> 可以通过其可扩展插件机制显示定制的小部件，允许用户和第三方扩展可设计小部件的范围。
或者，也可以使用现有的小部件作为提供类似 api 的小部件类的占位符。</p>
<a name="handling-custom-widgets"></a>
<h2 id="handling-custom-widgets">处理自定义小部件</h2>
<p>虽然 <i>Qt Designer</i> 支持所有的标准Qt小部件，一些特殊的小部件可能无法作为标准的原因如下:</p>
<ul>
<li>在设计用户界面时，定制小部件可能不可用。</li>
<li>定制小部件可能是特定于平台的，设计者可能在不同的平台上为最终用户开发用户界面。</li>
<li>自定义小部件的源代码不可用，或者用户界面设计人员由于非技术原因无法使用小部件。</li>
</ul>
<p>在上述情况下，仍然可以以在应用程序中使用定制小部件为目标来设计窗体。
为了实现这一点，我们可以使用 <i>Qt Designer</i> 的小部件提升特性。</p>
<p>在所有其他情况下，只要定制小部件的源代码可用，我们就可以通过 <i>Qt Designer</i> 修改定制小部件。</p>
<a name="promoting-widgets"></a>
<h3 id="promoting-widgets">提升小部件</h3>
<p class="centerAlign"><img src="images/designer-promoting-widgets.png" alt="" /></p><p>如果必须设计某些窗体，但设计人员无法使用某些定制小部件，我们可以用类似的小部件来替代缺少的小部件。
例如，我们可以用 <code>MyPushButton</code> 的实例来表示自定义按钮类 <a href="../qtwidgets/qpushbutton.html">QPushButton</a> 的实例，并将这些实例提升为 <code>MyPushButton</code> ，以便 <a href="../qtdoc/uic.html">uic</a> 为这个缺失的类生成合适的代码。</p>
<p>在选择一个小部件作为占位符时，将缺少的小部件的API与标准Qt小部件的API进行比较是有用的。
对于子类化标准类的专门化小部件，占位符的明显选择是自定义小部件的基类;
例如，<a href="../qtwidgets/qslider.html">QSlider</a> 可以用于特殊的 <a href="../qtwidgets/qslider.html">QSlider</a> 子类。</p>
<p>对于不与标准Qt小部件共享公共API的特殊小部件，值得考虑调整一个定制小部件以在 <i>Qt Designer</i> 中使用。
如果这是不可能的，那么 <a href="../qtwidgets/qwidget.html">QWidget</a> 显然是占位符小部件的首选，因为它是所有小部件的最低公分母。</p>
<p>要添加占位符，请选择合适基类的对象，并从窗体的上下文菜单中选择 <b>Promote to ..&#x2e;</b> 。在对话框的下方输入类名和头文件后，选择 <b>Add</b> ，占位符类将和基类一起出现在上面的列表中。单击 <b>Promote</b> 按钮接受此选择。</p>
<p>现在，当窗体的上下文菜单在基类的对象上打开时，占位符类将出现在 <b>Promote to</b> 子菜单中，允许方便地将对象提升到那个类 。</p>
<p>通过从窗体的上下文菜单中选择 <b>Demote to</b> ，可以将提升的小部件恢复到它的基类 。</p>
<a name="user-defined-custom-widgets"></a>
<h3 id="user-defined-custom-widgets">用户定义自定义小部件</h3>
<p class="centerAlign"><img src="images/worldtimeclockplugin-example.png" alt="" /></p><p>定制小部件可以在 <i>Qt Designer</i> 中进行调整，使设计人员有机会使用将在应用程序中使用的实际小部件(而不是占位符小部件)配置用户界面。
创建自定义小部件插件的过程在本手册的 <a href="designer-creating-custom-widgets.html">创建自定义小部件</a> 一章中进行了描述 。</p>
<p>要使用以这种方式创建的插件，必须确保插件位于 <i>Qt Designer</i> 搜索插件的路径上。通常当 <i>Qt Designer</i> 启动时，存储在 <code>$QTDIR/plugins/designer</code> 中的插件将被加载 。更多关于构建和安装插件的信息可以在 <a href="designer-creating-custom-widgets.html#buildingandinstallingtheplugin">这里</a> 找到。您也可以参考 <a href="../qtdoc/plugins-howto.html">Plugins HOWTO</a> 文档来获得关于创建插件的信息 。</p>
</div>
<!-- @@@designer-using-custom-widgets.html -->
<p class="naviNextPrevious footerNavi">
<a class="prevPage" href="designer-customizing-forms.html">自定义窗体</a>
<span class="naviSeparator">  &#9702;  </span>
<a class="nextPage" href="designer-creating-custom-widgets.html">创建自定义小部件（Widgets）</a>
</p>
        </div>
       </div>
   </div>
   </div>
</div>
<div class="footer">
   <p>
   <acronym title="Copyright">&copy;</acronym> 2020 The Qt Company Ltd.
   Documentation contributions included herein are the copyrights of
   their respective owners.<br/>    The documentation provided herein is licensed under the terms of the    <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation    License version 1.3</a> as published by the Free Software Foundation.<br/>    Qt and respective logos are trademarks of The Qt Company Ltd.     in Finland and/or other countries worldwide. All other trademarks are property
   of their respective owners. </p>
</div>
</body>
</html>
